package cn.lcsjsxy.yxz.day.Reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

//字节码
public class bytecode {
    public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException {

        //多态
        User user = new Child();
        user.test1();
        //user.test2();

        //类对象
        Class<? extends User> aClass = user.getClass();

        //获取类的名称
        System.out.println(aClass.getName());               // 获取类的完整名称
        System.out.println(aClass.getSimpleName());     //获取类的名称
        System.out.println(aClass.getPackageName());    //获取类的包的名称

        //类的父类
        Class<?> superclass = aClass.getSuperclass();
        System.out.println(superclass);

        //类的接口
        Class<?>[] interfaces = aClass.getInterfaces();
        System.out.println(interfaces.length);

        //类的属性
        Field f = aClass.getField("");                  //public
        Field f1 = aClass.getDeclaredField("");  //所有权限

        Field[] fields = aClass.getFields();                                            //public
        Field declaredField = aClass.getDeclaredField("q");   //所有权限

        //类的方法
        Method method = aClass.getMethod("test2");
        Method aaaa = aClass.getDeclaredMethod("aaaa");

        Method[] methods = aClass.getMethods();         //public
        Method[] declaredMethods = aClass.getDeclaredMethods();     //所有权限

        //构造方法  (Constructor:构造方法对象)
        Constructor<? extends User> constructor = aClass.getConstructor();
        Constructor<?>[] constructors = aClass.getConstructors();
        aClass.getDeclaredConstructor();

        //获取权限(修饰符) : 多个修饰符会融合成一个int值
        int modifiers = aClass.getModifiers();
        boolean aPrivate = Modifier.isPrivate(modifiers);

    }
}

//class User1{
//    public void test1(){
//        System.out.println("test1");
//    }
//}
//class Child1 extends User{
//    public void test2(){
//        System.out.println("test2");
//    }
//}